const CryptoJS = require('crypto-js') // 直接使用npm包名
// 强制使用JS实现的随机数生成器
CryptoJS.lib.WordArray.random = function(nBytes) {
  const words = [];
  for (let i = 0; i < nBytes; i += 4) {
    words.push(Math.floor(Math.random() * 0x100000000));
  }
  return CryptoJS.lib.WordArray.create(words, nBytes);
};

class CryptoUtil {
    constructor(secretKey) {
        this.secretKey = secretKey;
    }

    // AES加密
    encrypt(text) {
        try {
            const encrypted = CryptoJS.AES.encrypt(text, this.secretKey).toString();
            return encrypted;
        } catch (error) {
            console.error('加密失败:', error);
            return null;
        }
    }

    // AES解密
    decrypt(encryptedText) {
        try {
            const bytes = CryptoJS.AES.decrypt(encryptedText, this.secretKey);
            const decrypted = bytes.toString(CryptoJS.enc.Utf8);
            return decrypted;
        } catch (error) {
            console.error('解密失败:', error);
            return null;
        }
    }

    // 加密对象
    encryptObject(obj) {
        try {
            const jsonString = JSON.stringify(obj);
            return this.encrypt(jsonString);
        } catch (error) {
            console.error('对象加密失败:', error);
            return null;
        }
    }

    // 解密对象
    decryptObject(encryptedText) {
        try {
            const decryptedString = this.decrypt(encryptedText);
            return JSON.parse(decryptedString);
        } catch (error) {
            console.error('对象解密失败:', error);
            return null;
        }
    }

    // 生成随机字符串
    generateRandomString(length = 16) {
        const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
        let result = '';
        for (let i = 0; i < length; i++) {
            result += chars.charAt(Math.floor(Math.random() * chars.length));
        }
        return result;
    }
}

module.exports = CryptoUtil;